using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace Leucos
{
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;

        KeyboardState teclado, tecladoAnterior;
        Random NRand;

        Texture2D telaIntro, telaMenu, telaFase1;
        
        enum Telas { INTRO, MENU, FASE1, };

        Telas tela_atual;

        Jogador Leuco;

        Inimigo Moeba;

        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            graphics.PreferredBackBufferHeight = 800;
            graphics.PreferredBackBufferWidth = 600;
            Content.RootDirectory = "Content";
        }

        protected override void Initialize()
        {
            NRand = new Random();
            Leuco = new Jogador();
            Moeba = new Inimigo();

            tela_atual = Telas.INTRO;
            base.Initialize();
        }

        protected override void LoadContent()
        {
            spriteBatch = new SpriteBatch(GraphicsDevice);

            Leuco.jogador(Content.Load<Texture2D>("Leucos-faces-50"), new Vector2(50, 50), new Rectangle(50, 0, 50, 50));
            Moeba.jogador(Content.Load<Texture2D>("Moeba100"), new Vector2(NRand.Next(100, GraphicsDevice.Viewport.Width - 100), 0), new Rectangle(0, 0, 100, 100));

            telaIntro = Content.Load<Texture2D>("Intro");
            telaMenu = Content.Load<Texture2D>("Menu");
            telaFase1 = Content.Load<Texture2D>("Fase1");
        }

        protected override void UnloadContent()
        {

        }

        protected override void Update(GameTime gameTime)
        {
            teclado = Keyboard.GetState();
            switch (tela_atual)
            {
                case Telas.INTRO:
                    if (teclado.IsKeyDown(Keys.Enter))
                    {
                        tela_atual = Telas.MENU;
                    }
                    break;

                case Telas.MENU:
                    if (teclado.IsKeyDown(Keys.Enter) && !tecladoAnterior.IsKeyDown(Keys.Enter))
                    {
                        tela_atual = Telas.FASE1;
                    }
                    break;

                case Telas.FASE1:
                    //this.Fase1();
                    if (teclado.IsKeyDown(Keys.Right) && Leuco.posicao.X <= (this.Window.ClientBounds.Width - 50))
                    {
                        Leuco.posicao.X += Leuco.velocidade;
                        Leuco.retangulo.X = 0;
                    } else {
                        Leuco.retangulo.X = 50;
                        Leuco.retangulo.Y = 0;
                    }
                    if (teclado.IsKeyDown(Keys.Left) && Leuco.posicao.X >= 0)
                    {
                        Leuco.posicao.X -= Leuco.velocidade;
                        Leuco.retangulo.X = 100;
                    }
                    if (teclado.IsKeyDown(Keys.Up) && Leuco.posicao.Y >= 0)
                    {
                        Leuco.posicao.Y -= Leuco.velocidade;
                        Leuco.retangulo.X = 0;
                        Leuco.retangulo.Y = 50;
                    }
                    if (teclado.IsKeyDown(Keys.Down) && Leuco.posicao.Y <= this.Window.ClientBounds.Height - 50)
                    {
                        Leuco.posicao.Y += Leuco.velocidade;
                        Leuco.retangulo.X = 50;
                        Leuco.retangulo.Y = 50;
                    }
                    if(teclado.IsKeyDown(Keys.Space))
                    {
                        Leuco.retangulo.X = 100;
                        Leuco.retangulo.Y = 50;
                        Moeba.Update(gameTime);
                    }

                    break;
            }

            //Controle de saida do jogo
            if (teclado.IsKeyDown(Keys.Escape)) { Exit(); }


            tecladoAnterior = teclado;

            base.Update(gameTime);
        }

        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            spriteBatch.Begin();

            switch (tela_atual)
            {
                case Telas.INTRO:
                    spriteBatch.Draw(telaIntro, Vector2.Zero, Color.White);
                    break;
                case Telas.MENU:
                    spriteBatch.Draw(telaMenu, Vector2.Zero, Color.White);
                    break;
                case Telas.FASE1:
                    spriteBatch.Draw(telaFase1, Vector2.Zero, Color.White);
                    //aqui vao entrar os draw dos demais itens do jogo na fase 1
                    Leuco.Draw(spriteBatch);
                    Moeba.Draw(spriteBatch);
                    break;
            }

            spriteBatch.End();

            base.Draw(gameTime);
        }
    }
}
